# -*- coding: utf-8 -*-
from __future__ import absolute_import
import os
from celery import Celery, platforms

# 只要是想在自己的脚本中访问Django的数据库等文件就必须配置Django的环境变量
from django.conf import settings

profile = os.environ.get('PROJECT_PROFILE', 'develop')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.%s' % profile)

# app名字
app = Celery('celery_app')
app.config_from_object('django.conf:settings')
# 到各个APP里自动发现tasks.py文件
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)


# 结果序列化方案
CELERY_RESULT_SERIALIZER = 'json'
#允许的内容类型，
CELERY_ACCEPT_CONTENT=['pickle','json']
#任务的序列化方式
CELERY_TASK_SERIALIZER = 'json'

CELERY_TIMEZONE = 'UTC'

CELERY_ENABLE_UTC = False
# celery不能root用户启动解决
platforms.C_FORCE_ROOT = True

# 防止任务死锁
CELERYD_FORCE_EXECV = True

CELERY_SEND_TASK_SENT_EVENT = True
# 并发的worker数量
CELERYD_CONCURRENCY = 4

# # 任务发出后，经过一段时间还未收到acknowledge , 就将任务重新交给其他worker执行
CELERY_DISABLE_RATE_LIMITS = True
# 队列任务保存时间
CELERY_EVENT_QUEUE_TTL = 300

# 每个worker最多执行的任务数
CELERYD_MAX_TASKS_PER_CHILD = 200
# 单个任务的运行时间限制，否则会被杀死
CELERYD_TASK_TIME_LIMIT = 200
# celery任务执行结果的超时时间
CELERY_TASK_RESULT_EXPIRES = 24 * 60 * 60

CELERYD_FORCE = True

# CELERY_DEFAULT_ROUTING_KEY = "default"
# celery -A celery_app worker -n celery -l INFO -O fair --maxtasksperchild=128